package pe.com.bbva.mantenimiento.bo.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.com.bbva.mantenimiento.bo.TipoTarjetaBO;
import pe.com.bbva.mantenimiento.dao.TipoTarjetaDAO;
import pe.com.bbva.mantenimiento.domain.TipoTarjeta;
import pe.com.stefanini.core.bo.GenericBOImpl;
import pe.com.stefanini.core.bo.Grid;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.exceptions.DAOException;

@Service("tipoTarjetaBO")
public class TipoTarjetaBOImpl extends GenericBOImpl<TipoTarjeta> implements TipoTarjetaBO{
	
	@Resource
	private TipoTarjetaDAO tipoTarjetaDAO;
	
	private String codigo;
	
	public TipoTarjeta findById(Long id) throws BOException {
		TipoTarjeta tipoTarjeta = super.findById(TipoTarjeta.class, id);
		return tipoTarjeta;
	}

	public List<TipoTarjeta> findTipos(TipoTarjeta tipoTarjeta) throws BOException, DAOException {
		List<TipoTarjeta> listaTipos = tipoTarjetaDAO.findTipos(tipoTarjeta);
		return listaTipos;
	}

	public boolean validate(TipoTarjeta tipoTarjeta) throws BOException, DAOException{
		if(!tipoTarjeta.getCodTipoTarjeta().equals(codigo)){
			TipoTarjeta buscar = new TipoTarjeta();
			buscar.setCodTipoTarjeta(tipoTarjeta.getCodTipoTarjeta());
			List<TipoTarjeta> tipos = findTipos(buscar);
			if(tipos!=null && !tipos.isEmpty()){
				throw new BOException("El Tipo de Tarjeta ya existe");
			}
		}
		return true;
	}
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void save(TipoTarjeta tipoTarjeta, String codigo) throws BOException, DAOException {
		this.codigo = codigo;
		super.save(tipoTarjeta);
	}
	
	public Grid<TipoTarjeta> findToGrid(TipoTarjeta tipoTarjeta, String order, int page, int rows) throws BOException, DAOException {
		String where="where ";	
		List<TipoTarjeta> tipos= findTipos(tipoTarjeta);
	    return super.findToGridList(tipos, where, " order by "+order,page,rows);
	}
}